1. Field of the Invention
The present invention relates to writing data to remote devices in a multiprocessor computing machine. More particularly, the present invention relates to the maintenance of sequential store order operations in a multiprocessor computing machine.
2. Description of Related Art
One fundamental precept of a computing system is that the operations or instructions provided to the computing system are executed in the same order as passed to the computing system. In other words, programmers of a computer assume that if the operations are encoded in order, the resulting operations as executed by the computer will occur in that sequence. This fundamental assumption about the sequence of resulting operations is particularly important in the context of writing or storing information to the computing system. Conventional software assumes that the computing system maintains the sequential store order (SSO) of the write operations as encoded in a program's source code.
Proper maintenance of the order of sequential store operations is particularly important where these write operations transfer data to peripheral I/O devices, and where the operation of the I/O devices depends on the values previously written to the device. In a multiprocessor computing machine having various processors and peripheral I/O devices attached thereto, the maintenance of the proper sequence of store operations becomes more difficult.
For instance, FIG. 1 illustrates a multiprocessor computing machine, or a scaled shared memory machine, having multiple nodes 20 and 30, connected through communications bus or network 29, with devices 28 and 34 respectively. Node 20 and node 30 are capable of transferring data both to memory and to I/O devices over bus 29 to remote nodes.
Using FIG. 1 as an example, assume that a single CPU of the plurality of CPUs 22 and a single CPU of the plurality of CPUs 32 both desire to write data to device 34 in node 30. Further assume that the sequence of write operations is a write of data A from CPU 22, followed by a write of data B from CPU 32. Because I/O device 34 is local to CPU 32 in node 30, it is possible, due to network latency, that device 34 will first receive data B from CPU 32 before receiving the write request of data A from CPU 22. Under this scenario, the proper sequence of store operations was not maintained in the multiprocessor environment.
Multiprocessor computing systems conventionally utilize a memory based mutual exclusion lock, known as a MUTEX lock, to order memory operations performed by different processors on the system. A MUTEX lock prevents another processor in the multiprocessor system from interfering with the memory location protected by the lock while the lock is active. Once the lock is released, the memory location can be manipulated by other processors in the computing system.
However, the usefulness of such a memory based MUTEX lock to guarantee proper ordering of I/O operations depends on the ordering of memory operations with respect to I/O operations within the computing system. If the I/O operations are not ordered with respect to memory operations, the fact that a MUTEX lock has been released does not imply nor ensure that a prior I/O write operation to a device has completed, or even begun. As explained above, it is possible that some write operations may be processed in a sequence different than the programmer intended.
For these reasons, it is necessary to maintain the proper sequence of sequential store operations to peripheral remote I/O devices in a multiprocessor computing machine.